home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / saf / impl / GeneralSchemaAdjunct.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  7.4 KB  |  315 lines

  1. package com.extensibility.saf.impl;
  2.  
  3. import com.extensibility.saf.AdjunctException;
  4. import com.extensibility.saf.Association;
  5. import com.extensibility.saf.MetaSchema;
  6. import com.extensibility.saf.SchemaAdjunct;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.Enumeration;
  10. import java.util.Hashtable;
  11. import java.util.Properties;
  12. import java.util.Vector;
  13. import javax.xml.parsers.DocumentBuilder;
  14. import javax.xml.parsers.DocumentBuilderFactory;
  15. import javax.xml.parsers.ParserConfigurationException;
  16. import org.w3c.dom.Attr;
  17. import org.w3c.dom.Document;
  18. import org.w3c.dom.Element;
  19. import org.w3c.dom.Node;
  20. import org.w3c.dom.NodeList;
  21. import org.xml.sax.EntityResolver;
  22. import org.xml.sax.SAXException;
  23.  
  24. public class GeneralSchemaAdjunct implements SchemaAdjunct, Tags {
  25.    protected MetaSchema metaSchema;
  26.    protected Document adjunctDocument;
  27.    protected MultiHashtable nameMap;
  28.    protected Association documentAssociation;
  29.  
  30.    public GeneralSchemaAdjunct(Document var1, MetaSchema var2) {
  31.       this.init(var1, var2);
  32.    }
  33.  
  34.    public GeneralSchemaAdjunct(String var1, MetaSchema var2) {
  35.       try {
  36.          DocumentBuilderFactory var3 = DocumentBuilderFactory.newInstance();
  37.          var3.setValidating(false);
  38.          DocumentBuilder var4 = var3.newDocumentBuilder();
  39.          this.adjunctDocument = var4.newDocument();
  40.          Element var5 = this.adjunctDocument.createElement("schema-adjunct");
  41.          this.adjunctDocument.appendChild(var5);
  42.          var5.setAttribute("target", var1);
  43.          this.init(this.adjunctDocument, var2);
  44.       } catch (ParserConfigurationException var6) {
  45.          ((Throwable)var6).printStackTrace();
  46.          System.exit(1);
  47.       }
  48.  
  49.    }
  50.  
  51.    public GeneralSchemaAdjunct(File var1, EntityResolver var2, MetaSchema var3) throws SAXException, IOException {
  52.       try {
  53.          DocumentBuilderFactory var4 = DocumentBuilderFactory.newInstance();
  54.          var4.setValidating(false);
  55.          DocumentBuilder var5 = var4.newDocumentBuilder();
  56.          if (var2 != null) {
  57.             var5.setEntityResolver(var2);
  58.          }
  59.  
  60.          Document var6 = var5.parse(var1);
  61.          this.init(var6, var3);
  62.       } catch (ParserConfigurationException var7) {
  63.          ((Throwable)var7).printStackTrace();
  64.          System.exit(1);
  65.       }
  66.  
  67.    }
  68.  
  69.    private void init(Document var1, MetaSchema var2) {
  70.       this.metaSchema = var2;
  71.       this.adjunctDocument = var1;
  72.       this.nameMap = new MultiHashtable();
  73.       NodeList var3 = var1.getElementsByTagName("document");
  74.       if (var3.getLength() > 0) {
  75.          this.documentAssociation = new GeneralAssociation(this, (Element)var3.item(0));
  76.       }
  77.  
  78.       this.hashAssociations("element");
  79.       this.hashAssociations("attribute");
  80.    }
  81.  
  82.    public String getTarget() {
  83.       return this.adjunctDocument.getDocumentElement().getAttribute("target");
  84.    }
  85.  
  86.    public MetaSchema getMetaSchema() {
  87.       return this.metaSchema;
  88.    }
  89.  
  90.    public Association[] getAssociations() {
  91.       Vector var1 = new Vector();
  92.       this.gatherAssociations(var1, "document");
  93.       this.gatherAssociations(var1, "element");
  94.       this.gatherAssociations(var1, "attribute");
  95.       Association[] var2 = new Association[var1.size()];
  96.  
  97.       for(int var3 = 0; var3 < var1.size(); ++var3) {
  98.          var2[var3] = (Association)var1.elementAt(var3);
  99.       }
  100.  
  101.       return var2;
  102.    }
  103.  
  104.    public Association[] getAssociations(String var1) {
  105.       if (var1.equals("/")) {
  106.          if (this.documentAssociation == null) {
  107.             return new Association[0];
  108.          } else {
  109.             Association[] var11 = new Association[]{this.documentAssociation};
  110.             return var11;
  111.          }
  112.       } else {
  113.          SelectorXPath var2 = new SelectorXPath(var1);
  114.          int var3 = var1.lastIndexOf("/") + 1;
  115.          String var4 = var1.substring(var3);
  116.          Association[] var5 = this.getPotentialAssociations(var4);
  117.          Vector var6 = new Vector();
  118.  
  119.          for(int var7 = 0; var7 < var5.length; ++var7) {
  120.             Association var8 = var5[var7];
  121.             String var9 = var8.getSelector();
  122.             SelectorXPath var10 = new SelectorXPath(var9);
  123.             if (var10.matches(var2)) {
  124.                var6.addElement(var8);
  125.             }
  126.          }
  127.  
  128.          Association[] var12 = new Association[var6.size()];
  129.  
  130.          for(int var13 = 0; var13 < var6.size(); ++var13) {
  131.             var12[var13] = (Association)var6.elementAt(var13);
  132.          }
  133.  
  134.          return var12;
  135.       }
  136.    }
  137.  
  138.    public Association[] getAssociations(Element var1) {
  139.       return this.getAssociations(var1, (Attr)null);
  140.    }
  141.  
  142.    public Association[] getAssociations(Element var1, Attr var2) {
  143.       String var3;
  144.       if (var2 == null) {
  145.          var3 = var1.getNodeName();
  146.       } else {
  147.          var3 = String.valueOf("@").concat(String.valueOf(var2.getNodeName()));
  148.       }
  149.  
  150.       Association[] var4 = this.getPotentialAssociations(var3);
  151.       Vector var5 = new Vector();
  152.  
  153.       for(int var6 = 0; var6 < var4.length; ++var6) {
  154.          Association var7 = var4[var6];
  155.          String var8 = var7.getSelector();
  156.          SelectorXPath var9 = new SelectorXPath(var8);
  157.          if (var9.matches(var1, var2)) {
  158.             var5.addElement(var7);
  159.          }
  160.       }
  161.  
  162.       Association[] var10 = new Association[var5.size()];
  163.  
  164.       for(int var11 = 0; var11 < var5.size(); ++var11) {
  165.          var10[var11] = (Association)var5.elementAt(var11);
  166.       }
  167.  
  168.       return var10;
  169.    }
  170.  
  171.    public String getProperty(String var1, String var2) {
  172.       return this.getProperty(this.getAssociations(var1), var2);
  173.    }
  174.  
  175.    public String getProperty(Element var1, String var2) {
  176.       return this.getProperty(this.getAssociations(var1), var2);
  177.    }
  178.  
  179.    public String getProperty(Element var1, Attr var2, String var3) {
  180.       return this.getProperty(this.getAssociations(var1, var2), var3);
  181.    }
  182.  
  183.    protected void hashAssociations(String var1) {
  184.       NodeList var2 = this.adjunctDocument.getElementsByTagName(var1);
  185.  
  186.       for(int var3 = 0; var3 < var2.getLength(); ++var3) {
  187.          Node var4 = var2.item(var3);
  188.          String var5 = ((Element)var4).getAttribute("which");
  189.          var5 = var5.substring(var5.lastIndexOf("/") + 1);
  190.          this.nameMap.put(var5, new GeneralAssociation(this, (Element)var4));
  191.       }
  192.  
  193.    }
  194.  
  195.    protected String getProperty(Association[] var1, String var2) {
  196.       String var3 = null;
  197.  
  198.       for(int var4 = 0; var4 < var1.length; ++var4) {
  199.          String var5 = var1[var4].getProperty(var2);
  200.          if (var3 == null) {
  201.             var3 = var5;
  202.          } else if (var5 != null) {
  203.             throw new AdjunctException("ambiguous property specification");
  204.          }
  205.       }
  206.  
  207.       return var3;
  208.    }
  209.  
  210.    protected void gatherAssociations(Vector var1, String var2) {
  211.       NodeList var3 = this.adjunctDocument.getElementsByTagName(var2);
  212.  
  213.       for(int var4 = 0; var4 < var3.getLength(); ++var4) {
  214.          var1.addElement(new GeneralAssociation(this, (Element)var3.item(var4)));
  215.       }
  216.  
  217.    }
  218.  
  219.    protected Association[] getPotentialAssociations(String var1) {
  220.       Vector var2 = (Vector)this.nameMap.get(var1);
  221.       if (var2 == null) {
  222.          return new Association[0];
  223.       } else {
  224.          Association[] var3 = new Association[var2.size()];
  225.  
  226.          for(int var4 = 0; var4 < var2.size(); ++var4) {
  227.             var3[var4] = (Association)var2.elementAt(var4);
  228.          }
  229.  
  230.          return var3;
  231.       }
  232.    }
  233.  
  234.    public Association[] getAssociationsBySelector(String var1) {
  235.       if (var1.equals("/")) {
  236.          Association[] var9 = new Association[]{this.documentAssociation};
  237.          return var9;
  238.       } else {
  239.          int var2 = var1.lastIndexOf("/") + 1;
  240.          String var3 = var1.substring(var2);
  241.          Association[] var4 = this.getPotentialAssociations(var3);
  242.          Vector var5 = new Vector();
  243.  
  244.          for(int var6 = 0; var6 < var4.length; ++var6) {
  245.             Association var7 = var4[var6];
  246.             if (var1.equals(var7.getSelector())) {
  247.                var5.addElement(var7);
  248.             }
  249.          }
  250.  
  251.          Association[] var10 = new Association[var5.size()];
  252.  
  253.          for(int var8 = 0; var8 < var5.size(); ++var8) {
  254.             var10[var8] = (Association)var5.elementAt(var8);
  255.          }
  256.  
  257.          return var10;
  258.       }
  259.    }
  260.  
  261.    public String[] getSelectors() {
  262.       Association[] var1 = this.getAssociations();
  263.       Properties var2 = new Properties();
  264.  
  265.       for(int var3 = 0; var3 < var1.length; ++var3) {
  266.          ((Hashtable)var2).put(var1[var3].getSelector(), "");
  267.       }
  268.  
  269.       String[] var4 = new String[((Hashtable)var2).size()];
  270.       Enumeration var5 = ((Hashtable)var2).keys();
  271.  
  272.       for(int var6 = 0; var6 < ((Hashtable)var2).size(); ++var6) {
  273.          var4[var6] = (String)var5.nextElement();
  274.       }
  275.  
  276.       return var4;
  277.    }
  278.  
  279.    public Association createAssociation(int var1, String var2) {
  280.       String var3 = var1 == 0 ? "document" : (var1 == 1 ? "element" : "attribute");
  281.       Element var4 = this.adjunctDocument.createElement(var3);
  282.       Element var5 = this.adjunctDocument.getDocumentElement();
  283.       var5.appendChild(var4);
  284.       GeneralAssociation var6 = new GeneralAssociation(this, var4);
  285.       if (var1 != 0) {
  286.          var4.setAttribute("which", var2);
  287.          String var7 = var2.substring(var2.lastIndexOf("/") + 1);
  288.          this.nameMap.put(var7, var6);
  289.       }
  290.  
  291.       return var6;
  292.    }
  293.  
  294.    public void removeAssociation(Association var1) {
  295.       GeneralAssociation var2 = (GeneralAssociation)var1;
  296.       Element var3 = var2.getMetaData();
  297.       String var4 = var3.getAttribute("which");
  298.       var4 = var4.substring(var4.lastIndexOf("/") + 1);
  299.       Vector var5 = (Vector)this.nameMap.get(var4);
  300.       if (var5 != null) {
  301.          var5.removeElement(var2);
  302.       }
  303.  
  304.       Node var6 = var3.getParentNode();
  305.       if (var6 != null) {
  306.          var6.removeChild(var3);
  307.       }
  308.  
  309.    }
  310.  
  311.    public Document getDocument() {
  312.       return this.adjunctDocument;
  313.    }
  314. }
  315.